In some abstract programming and runtime environments, programmers interact with a graphical user interface to select and interconnect components to build a program. For example, in such a visual programming environment, programmers arrange graphical representations of components (such as representing functions/application programming interfaces or APIs), connect them together, and see a representation of each of them as well their interconnection relationships to one another.
However, the programmer to needs to ensure that components are compatible with one another, that is, so that inputs and outputs are mapped cleanly to one another. By way of example, consider two components “A” and “B” comprising APIs that are linked to each other such that the output of A is sent to the input of B. If A is configured to send an array, but B is expecting a single object (or vice-versa), there will be a type mismatch and the connection will fail. This burdens programmers by adding complexity to programming, which conflicts with a general aim to simplify programming through such environments.